﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using produccion.vistamodelo;
using System.ComponentModel;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMconPedRef.xaml
    /// </summary>
    public partial class FRMconPedRef : Window
    {
        public FRMconPedRef()
        {
            InitializeComponent();
        }

        private void butPro_Click(object sender, RoutedEventArgs e)
        {
            conPedRef.procesar();
        }

        private void butImp_Click(object sender, RoutedEventArgs e)
        {
            conPedRef.imprimir();
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void botTodo_Click(object sender, RoutedEventArgs e)
        {
            conPedRef.selTodo();
        }

        private void butNing_Click(object sender, RoutedEventArgs e)
        {
            conPedRef.selNinguno();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Keyboard.Focus(texCod);
        }

        private void datInf_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        //
        // SINGLE CLICK EDITING
        //
        private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DataGridCell cell = sender as DataGridCell;
            if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
            {
                if (!cell.IsFocused)
                {
                    cell.Focus();
                }
                DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
                if (dataGrid != null)
                {
                    if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
                    {
                        if (!cell.IsSelected)
                            cell.IsSelected = true;
                    }
                    else
                    {
                        DataGridRow row = FindVisualParent<DataGridRow>(cell);
                        if (row != null && !row.IsSelected)
                        {
                            row.IsSelected = true;
                        }
                    }
                }
            }
        }

        static T FindVisualParent<T>(UIElement element) where T : UIElement
        {
            UIElement parent = element;
            while (parent != null)
            {
                T correctlyTyped = parent as T;
                if (correctlyTyped != null)
                {
                    return correctlyTyped;
                }

                parent = VisualTreeHelper.GetParent(parent) as UIElement;
            }
            return null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        } 
    }


    public class conPedRef:ObservableObject 
    {
      
        public conPedRef()
        {
            consColor();
            consCli();
            //-----------------------
            buscarReferencia = new VMbuscarReferencia();
            buscarReferencia.TieneColor = false;
            buscarReferencia.PropertyChanged += onBuscarReferenciaPropertyChanged;

            MDOgeneral.conectar();
            strTituloVentana = "Consulta pedidos cliente/referencia - Usuario: " + MDOgeneral.usuario + " - [FRMconPedRef]";
        }

        //----------------------------------
        void onBuscarReferenciaPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarReferencia.IsOpen)
                    {
                        foreach (string x in buscarReferencia.listaProducto)
                        {
                            codref = x;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private VMbuscarReferencia _buscarReferencia;
        public VMbuscarReferencia buscarReferencia
        {
            get { return _buscarReferencia; }
            set { _buscarReferencia = value; RaisePropertyChangedEvent("buscarReferencia"); }
        }

        RelayCommand _cmdBuscarReferencia;
        public ICommand cmdBuscarReferencia
        {
            get
            {
                if (_cmdBuscarReferencia == null)
                {
                    _cmdBuscarReferencia = new RelayCommand(x => buscarReferencias());
                }
                return _cmdBuscarReferencia;
            }
        }

        public void buscarReferencias()
        {
            try
            {
                buscarReferencia.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private ObservableCollection<color> _colores = new ObservableCollection<color>();
        public ObservableCollection<color> colores
        {
            get { return _colores; }
            set { _colores = value; RaisePropertyChangedEvent("colores"); }
        }

        private color _selcolor;
        public color selcolor
        {
            get { return _selcolor; }
            set 
            { 
                _selcolor = value; 
                RaisePropertyChangedEvent("selcolor");
                if (selcolor != null)
                {
                    if (selcolor.codcol != null)
                        visorFotoReferencia.strColor = selcolor.codcol;
                }
            }
        }

        public class color : ObservableObject
        {
            private Boolean _estaSel = true;
            public Boolean estaSel
            {
                get { return _estaSel; }
                set { _estaSel = value; RaisePropertyChangedEvent("estaSel"); }
            }

            private string _codcol;
            public string codcol
            {
                get { return _codcol; }
                set { _codcol = value; RaisePropertyChangedEvent("codcol"); }
            }

            private string _nomcol;
            public string nomcol
            {
                get { return _nomcol; }
                set { _nomcol = value; RaisePropertyChangedEvent("nomcol"); }
            }
        }

        public void consColor()
        {
            try
            {
                clases.CLSMAECOL maecol = new clases.CLSMAECOL();
                List<clases.CLSMAECOL> col = maecol.ListarColores();
                foreach (clases.CLSMAECOL r in col)
                {
                    color a = new color { codcol = r.CODCOL_COL, nomcol = r.NOMCOL_COL };
                    colores.Add(a);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        string selcolores;
        public void ConSelcolores()
        {
            try
            {
                selcolores = "";
                foreach (color r in colores)
                {
                    if (r.estaSel)
                    {
                        if (String.IsNullOrEmpty(selcolores))
                        {
                            selcolores = r.codcol;
                        }
                        else
                        {
                            selcolores = selcolores + "-" + r.codcol;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private List<clases.CLSMAECLIP> _lisCli = new List<clases.CLSMAECLIP>();
        public List<clases.CLSMAECLIP> lisCli
        {
            get { return _lisCli; }
            set { _lisCli = value; RaisePropertyChangedEvent("lisCli"); }
        }

        private clases.CLSMAECLIP _selCli = new clases.CLSMAECLIP();
        public clases.CLSMAECLIP selCli
        {
            get { return _selCli; }
            set { _selCli = value; RaisePropertyChangedEvent("selCli"); }
        }

        public void consCli()
        {
            try
            {
                lisCli = selCli.listaCliente();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private DateTime _desde = Convert.ToDateTime("01/01/" + DateTime.Now.Year.ToString());
        public DateTime desde 
        {
            get { return _desde; }
            set { _desde = value; RaisePropertyChangedEvent("desde"); }
        }

        private DateTime _hasta = DateTime.Today;
        public DateTime hasta 
        {
            get { return _hasta; }
            set { _hasta = value; RaisePropertyChangedEvent("hasta"); }
        }

        private string _estado="P";
        public string estado 
        {
            get { return _estado; }
            set { _estado = value; RaisePropertyChangedEvent("estado"); }
        }

        private string _codref;
        public string codref 
        {
            get { return _codref;}
            set 
            { 
                _codref = value;
                conNomRef();
                if (!String.IsNullOrEmpty(_codref))
                {
                    visorFotoReferencia.strCodigo = _codref;
                }
                else {
                    visorFotoReferencia.strCodigo = "";
                }
                RaisePropertyChangedEvent("codref");
            }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; base.OnPropertyChanged("visorFotoReferencia"); }
        }

        private string _nomref;
        public string nomref 
        {
            get { return _nomref; }
            set { _nomref = value; RaisePropertyChangedEvent("nomref"); }
        }

        public void conNomRef()
        {
            try
            {
                clases.CLSMAEREF refe = new clases.CLSMAEREF { CODREF_REF = _codref };
                refe.Consultar();
                nomref = refe.NOMREF_REF;

                colores.Clear();
                clases.CLSMAECOL maecol = new clases.CLSMAECOL();
                List<clases.CLSMAECOL> col = maecol.ListarColoresReferencia(codref);
                foreach (clases.CLSMAECOL r in col)
                {
                    color a = new color { codcol = r.CODCOL_COL, nomcol = r.NOMCOL_COL };
                    colores.Add(a);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private DataTable _informe = new DataTable();
        public DataTable informe 
        {
            get { return _informe; }
            set { _informe = value; RaisePropertyChangedEvent("informe"); }
        }
        
        public void procesar() 
        {
            try 
            {
                Mouse.OverrideCursor = Cursors.Wait;
                clases.CLSTEMPORAL tmp = new clases.CLSTEMPORAL();
                ConSelcolores();
                tmp.SP_INFPEDCLIREF(codref, selcolores, selCli==null?"":selCli.CODCLI_CLI, estado, desde, hasta);
                informe=tmp.TMPPEDCLIREF;
                Mouse.OverrideCursor = Cursors.Arrow;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        
        public void selTodo()
        {
            try
            {
                foreach (color r in colores)
                {
                    r.estaSel = true;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void selNinguno()
        {
            try
            {
                foreach (color r in colores)
                {
                    r.estaSel = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void buscarRef()
        {
            try
            {
                FRMBuscarCol f = new FRMBuscarCol();
                f.EsReferencia = true;
                f.RequiereColor = false;
                f.Retorno = "";
                f.ShowDialog();
                if (!String.IsNullOrEmpty(f.Retorno))
                {
                    codref = f.Retorno;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void imprimir() 
        {
            try 
            {
                DataSet ds = new DataSet("dsConPedRef");
                DataTable encabezado = new DataTable("ENCABEZADO");
                encabezado.Columns.Add("REFERENCIA");
                encabezado.Columns.Add("DESDE");
                encabezado.Columns.Add("HASTA");
                encabezado.Columns.Add("CLIENTE");
                encabezado.Columns.Add("ESTADO");
                DataRow r = encabezado.NewRow();
                r["CLIENTE"] =selCli==null?"":selCli.NOMCLI_CLI;
                r["DESDE"] = desde.ToShortDateString();
                r["HASTA"] = hasta.ToShortDateString();
                r["REFERENCIA"] = nomref;
                r["ESTADO"] = estado.Equals("P") ? "Pendiente" : "Original";
                encabezado.Rows.Add(r);
                ds.Tables.Add(encabezado);
                informe.TableName = "TMPPEDCLIREF";
                ds.Tables.Add(informe.Copy());
                Vista vista = new Vista { ds = ds, reporte = @"reportes\repConPedRef.rpt" };
                vista.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private BitmapImage _imagen1 = new BitmapImage();
        public BitmapImage imagen1
        {
            get { return _imagen1; }
            set { _imagen1 = value; RaisePropertyChangedEvent("imagen1"); }
        }

    }
}
